package com.doordu.admin.common.core.dao;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import com.doordu.admin.common.core.page.PageBean;
import com.doordu.admin.common.core.page.PageParam;

/**
 * 数据访问层基础支撑接口.
 * 
 * @ClassName: BaseDao
 * @Description:
 * @author xiaoqun.yi yixq@doordu.com
 * @date 2017年3月27日 下午3:24:09
 * @version V1.3
 * @param <T>
 */
public interface BaseDao<T> {

	/**
	 * 函数功能说明 ：单条插入数据
	 * 
	 * @Title: insert
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:24:29
	 * @param entity
	 * @return
	 * @return int
	 */
	int insert(T entity);

	/**
	 * 函数功能说明 ： 批量插入数据
	 * 
	 * @Title: insert
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:24:34
	 * @param list
	 * @return
	 * @return int
	 */
	int insert(List<T> list);

	/**
	 * 函数功能说明 ：根据id单条更新数据
	 * 
	 * @Title: update
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:24:40
	 * @param entity
	 * @return
	 * @return int
	 */
	int update(T entity);

	/**
	 * 函数功能说明 ： 根据id批量更新数据
	 * 
	 * @Title: update
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:15
	 * @param list
	 * @return
	 * @return int
	 */
	int update(List<T> list);

	/**
	 * 函数功能说明 ： 根据column批量更新数据
	 * 
	 * @Title: update
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:24
	 * @param paramMap
	 * @return
	 * @return int
	 */
	int update(Map<String, Object> paramMap);

	/**
	 * 函数功能说明 ： 根据id查询数据
	 * 
	 * @Title: getById
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:32
	 * @param id
	 * @return
	 * @return T
	 */
	T getById(String id);
	/**
	 * 函数功能说明 ： 根据column查询数据
	 * 
	 * @Title: getByColumn
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:41
	 * @param paramMap
	 * @return
	 * @return T
	 */
	public T getByColumn(Map<String, Object> paramMap);

	/**
	 * 根据条件查询 listBy
	 * 
	 * @Title: getBy
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:50
	 * @param paramMap
	 * @return
	 * @return T
	 */
	public T getBy(Map<String, Object> paramMap);

	/**
	 * 根据条件查询列表数据.
	 * 
	 * @Title: listBy
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:25:54
	 * @param paramMap
	 * @return
	 * @return List<T>
	 */
	public List<T> listBy(Map<String, Object> paramMap);

	/**
	 * 函数功能说明 ： 根据column查询列表数据.
	 * 
	 * @Title: listByColumn
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:01
	 * @param paramMap
	 * @return
	 * @return List<T>
	 */
	public List<T> listByColumn(Map<String, Object> paramMap);

	/**
	 * 函数功能说明 ： 根据column查询记录数
	 * 
	 * @Title: getCountByColumn
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:10
	 * @param paramMap
	 * @return
	 * @return Long
	 */
	Long getCountByColumn(Map<String, Object> paramMap);

	/**
	 * 函数功能说明 ： 根据id删除数据
	 * 
	 * @Title: delete
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:16
	 * @param id
	 * @return
	 * @return int
	 */
	int delete(String id);

	/**
	 * 函数功能说明 ： 根据id批量删除数据
	 * 
	 * @Title: delete
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:23
	 * @param list
	 * @return
	 * @return int
	 */
	int delete(List<T> list);

	/**
	 * 函数功能说明 ： 根据column批量删除数据
	 * 
	 * @Title: delete
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:29
	 * @param paramMap
	 * @return
	 * @return int
	 */
	int delete(Map<String, Object> paramMap);

	/**
	 * 函数功能说明 ： 分页查询数据
	 * 
	 * @Title: listPage
	 * @Description:
	 * @author xiaoqun.yi yixq@doordu.com
	 * @date 2017年3月27日 下午3:26:36
	 * @param pageParam
	 * @param paramMap
	 * @return
	 * @return PageBean
	 */
	public PageBean listPage(PageParam pageParam, Map<String, Object> paramMap);

	public SqlSessionTemplate getSessionTemplate();

	public SqlSession getSqlSession();
}
